package com.zgh.service;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zgh.domain.User;
import com.zgh.domain.ipageUser;
import com.zgh.mapper.UserMapper;
import org.apache.ibatis.annotations.Update;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

@Service
public class UserService {
    @Autowired
    private UserMapper userMapper;

    /**
     * 根据openid查询用户
     * @param openid openid
     * @return 用户
     */
    public User findByOpenId(String openid) {
        LambdaQueryWrapper<User> userLambdaQueryWrapper = new QueryWrapper<User>().lambda();
        userLambdaQueryWrapper.eq(User::getOpenid, openid);
        return userMapper.selectOne(userLambdaQueryWrapper);
    }
    /**
     * 根据id查询用户
     * @param id id
     * @return 用户
     */
    public User findById(int id) {
        LambdaQueryWrapper<User> userLambdaQueryWrapper = new QueryWrapper<User>().lambda();
        userLambdaQueryWrapper.eq(User::getId, id);
        return userMapper.selectOne(userLambdaQueryWrapper);
    }
    /**
     * 注册
     * @param user 实体
     */
    public int register(User user) {
        return userMapper.insert(user);
    }

    /**
     * 保存用户信息
     * @param  user 用户信息
     */
    public int saveUserInfo(User user){
        QueryWrapper<User> wrapper = new QueryWrapper<>();
        wrapper.eq("openid",user.getOpenid());
        User user1 = userMapper.selectOne(wrapper);
        user1.setAge(user.getAge());
        user1.setPhone(user.getPhone());
        user1.setArea(user.getArea());
        UpdateWrapper userUpdateWrapper = new UpdateWrapper();
        userUpdateWrapper.eq("openid",user.getOpenid());
        return  userMapper.update(user1,userUpdateWrapper);
        //LambdaUpdateWrapper<User> userLambdaUpdateWrapper = new UpdateWrapper<User>().lambda();
        //userLambdaUpdateWrapper.set(User::getAge,user.getAge());
        ////userLambdaUpdateWrapper.set(User::getLevel,user.getLevel());
        //userLambdaUpdateWrapper.set(User::getArea,user.getArea());
        //userLambdaUpdateWrapper.set(User::getPhone,user.getPhone());
        //userLambdaUpdateWrapper.eq(User::getOpenid,user.getOpenid());
        //return userMapper.update(user,userLambdaUpdateWrapper);
    }

    /**
     * 管理员登录
     * @param username
     * @param password
     */
    public User mannerLogin(String username, String password) {
        LambdaUpdateWrapper<User> userLambdaUpdateWrapper = new UpdateWrapper<User>().lambda();
        userLambdaUpdateWrapper.eq(User::getNickname,username);
        List<User> userlist = userMapper.selectList(userLambdaUpdateWrapper);
        if (userlist.get(0)==null){
            return null;
        }
        String password1 = userlist.get(0).getPassword();
        if (password1.equals(password)){
            if(userlist.get(0).getLevel()==1){
                return userlist.get(0);
            } else {
                return null;
            }
        } else {
            return null;
        }
    }

    /**
     * 分页查询获取所有用户信息
     * @return userList
     */
    public ipageUser getAllUserInfo(int page1, int PAGE_RECORDS_NUM, String query) {
        List<User> userList = new ArrayList<User>();
        // 设置条件构造器
        QueryWrapper<User> wrapper = new QueryWrapper<>();
        wrapper.like("nickname",query);
        // 构造分页信息，其中的Page<>(page, PAGE_RECORDS_NUM)的第一个参数是页数，而第二个参数是每页的记录数
        IPage<User> userPage = new Page<>(page1, PAGE_RECORDS_NUM);
        // page(postPage, wrapper)这里的第一个参数就是上面定义了的Page对象，第二个参数就是上面定义的条件构造器对象，通过调用这个方法就可以根据你的分页信息以及查询信息获取分页数据
        IPage<User> user1IPage = userMapper.selectPage(userPage, wrapper);
        // 封装数据，其中getRecords()是获取记录数，getCurrent()获取当前页数，getPages()获取总页数，getTotal()获取记录总数，还要其他更多的方法，大家可以自行查看，在这里就不过多赘述了
        userList = user1IPage.getRecords();
        Long total = user1IPage.getTotal();
        ipageUser ipageUser = new ipageUser();
        ipageUser.setUserList(userList);
        ipageUser.setTotal(total.intValue());
        return ipageUser;
    }

    /**
     * 修改用户信息
     * @param user
     */
    public int saveInfoByid(User user){
        QueryWrapper<User> wrapper = new QueryWrapper<>();
        wrapper.eq("id",user.getId());
        User user1 = userMapper.selectOne(wrapper);
        user1.setAge(user.getAge());
        user1.setPhone(user.getPhone());
        user1.setArea(user.getArea());
        UpdateWrapper userUpdateWrapper = new UpdateWrapper();
        userUpdateWrapper.eq("id",user.getId());
        return  userMapper.update(user1,userUpdateWrapper);
    }


    /**
     * 删除用户
     * @param id
     */
    public int deleteByid(Integer id) {
        return userMapper.deleteById(id);
    }
}
